Imports DataAccesGenerales
Imports DataAcces
Imports System.Data

Partial Class Documentos_AvisoArribo_AvisoArriboDocumento
	Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Try
            If Not Page.IsPostBack Then
                Dim datosUsuario As New dataLogin
                Dim consGenerales As New DataAccesGenerales()
                datosUsuario = Session("Data_Login")
                Dim nidDocumento As String = Request.QueryString("nidDocumento")
                Dim nidUsuario As Long
                nidUsuario = consGenerales.usuarioObtieneNidUsuario(Session("Data_Login"))
                'Me.ctlArchivoAnexos.asignarParametros(nidUsuario, nidDocumento, 3)

                If Not nidDocumento = String.Empty Then
                    Me.ctlEncabezadoDocumento.ObtenerDocumento(CLng(nidDocumento))
                    cargarDatos()
                    cargarConsulta(CLng(nidDocumento))
                    habilitarCampos(CInt(Me.ctlEncabezadoDocumento.EstadoDocumento))
                Else
                    Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.Nuevo
                    habilitarCampos(enumEstadoDeDocumento.Nuevo)
                    'Me.ctlArchivoAnexos.eliminarArchivosLista()
                    If consGenerales.usuarioTieneElRol(nidUsuario, ?nidRol) <> 1 Then 'nidRol=nid tipo de usuario que tiene permiso para el documento
                        ctlToolBar.Visible = False
                        Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.NoTienePermiso)
                        mensaje()
                    End If
                End If
            End If
        Catch ex As Exception
            Me.ctlDocumentoMensaje.MostrarException(Controles_ctlDocumentoMensaje.tipoMensaje.CargarParginaExcepcion, ex.Message)
            mensaje()
        End Try
    End Sub

#Region "Eventos"

    Protected Sub ctlToolbar_BtnNuevoClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnNuevoClicked
        nuevoDocumento()
        cargarDatos()
    End Sub

    Protected Sub ctlToolbar_BtnGuardarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnGuardarClicked
        If VerificarDatos() Then
            If Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.NuevoAGuardar Then
                crearDocumento()
                If Me.ctlEncabezadoDocumento.NidDocumento <> 0 Then
                    guardarDocumento(Me.ctlEncabezadoDocumento.NidDocumento)
                End If
            Else
                guardarDocumento(Me.ctlEncabezadoDocumento.NidDocumento)
            End If
        End If
    End Sub

    Protected Sub ctlToolbar_BtnAprobarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnAprobarClicked
        firmarDocumento()
    End Sub

    Protected Sub ctlToolbar_BtnEditarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnEditarClicked
        editarDocumento()
    End Sub

    Protected Sub ctlToolbar_BtnImprimirClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnImprimirClicked
        imprimirDocumento()
    End Sub

    Protected Sub ctlToolbar_BtnListaClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnListaClicked
        consultarIncidencias()
    End Sub

    Protected Sub ctlToolbar_BtnRechazarClicked(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlToolBar.BtnRechazarClicked
        cancelarDocumento()
    End Sub

    Protected Sub ctlDocumentoCancelar_BtnCancelarDoc(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlDocumentoCancelar.BtnCancelarDoc
        Try
            If Not Me.ctlDocumentoCancelar.DescripcionCancelacion = String.Empty Then
                Dim conDoc As New DataAccesGenerales
                Dim transaccion As Byte
                transaccion = conDoc.confirmarDocumento(CInt(Me.ctlEncabezadoDocumento.NidDocumento), enumEstadoDeDocumento.Rechazado, Me.ctlDocumentoCancelar.DescripcionCancelacion, Session("Data_Login"))
                If transaccion <> DataAccesGenerales.transaccion.transaccionNoTerminada Then
                    Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.Rechazado
                    habilitarCampos(enumEstadoDeDocumento.Rechazado)
                    Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.CancelacionExito)
                End If
            Else
                Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.IndicarMotivoCancelacion)
            End If
        Catch ex As Exception
            Me.ctlDocumentoMensaje.MostrarException(Controles_ctlDocumentoMensaje.tipoMensaje.CancelacionExcepcion, ex.Message)
        End Try
        mensaje()
    End Sub

    Protected Sub ctlDocumentoFirmar_BtnFirmarDoc(ByVal sender As Object, ByVal e As System.EventArgs) Handles ctlDocumentoFirmar.BtnFirmarDoc
        If Me.ctlDocumentoFirmar.validarCertificadosAgregados() Then
            If Me.ctlDocumentoFirmar.validarExtensionLlaves() Then
                If Me.ctlDocumentoFirmar.validarContrase�a() Then
                    Try
                        firmar()
                    Catch ex As Exception
                        Me.ctlDocumentoMensaje.MostrarException(Controles_ctlDocumentoMensaje.tipoMensaje.FirmaExcepcion, ex.Message)
                    End Try
                Else
                    Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.ErrorContrase�a)
                End If
            Else
                Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.ErrorArchivosLlaves)
            End If
        Else
            Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.ErrorArchivosLlaves)
        End If
        mensaje()
    End Sub

    
#End Region

#Region "Metodos"

    ''' <summary>
    ''' Metodo para cargar todos los datos requeridos para llenar el archivo
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub cargarDatos()
        'Datos a cargar al inicio del documento
    End Sub

    ''' <summary>
    ''' Metodo para cargar los datos al consultar el documento previamente creado y guardado en la base de datos
    ''' </summary>
    ''' <param name="nidDocumento"> nid del documento a cargar</param>
    ''' <remarks></remarks>
    Private Sub cargarConsulta(nidDocumento As Integer)
        'Carga los datos de una consulta del documento
		Dim dAvisoArribo As New DataAccesAvisoArribo
		Dim tablaAvisoArribo As DataTable

		tablaAvisoArribo = dAvisoArribo.AvisoArribo_Consultar(Me.ctlEncabezadoDocumento.NidDocumento)

    End Sub

    ''' <summary>
    ''' Metodo para habilitar los campos dependiendo del estado actual del documento
    ''' el cual puede ser alguna de estas opciones:
    ''' Nuevo
    ''' NuevoAGuardar
    ''' PendienteDeAprobacion
    ''' Aprobado
    ''' Rechazado
    ''' Terminado
    ''' </summary>
    ''' <param name="estadoDoc"> estado del documento actualmente</param>
    ''' <remarks>El estado se obtine del control ctlEncabezadoDocumento</remarks>
    Private Sub habilitarCampos(ByVal estadoDoc As DataAccesGenerales.enumEstadoDeDocumento)
        habilitarDocumento(False)
        Select Case estadoDoc
            Case enumEstadoDeDocumento.Nuevo
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Nuevo)

            Case enumEstadoDeDocumento.NuevoAGuardar
                habilitarDocumento(True)
                Me.ctlEncabezadoDocumento.TextoCodigo = textoEcabezado.enElaboracion
                Me.ctlEncabezadoDocumento.TextoFechaCreacion = Now.Date.ToShortDateString()
                Me.ctlEncabezadoDocumento.TextoEstado = textoEcabezado.nuevo
                Dim datUsuario As New DataAccesGenerales()
                Me.ctlEncabezadoDocumento.TextoEmisor = datUsuario.usuarioObtieneNombre(Session("Data_Login"))
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.NuevoAGuardar)

            Case enumEstadoDeDocumento.PendienteDeAprobacion
                Dim conDoc As New DataAccesGenerales()
                If conDoc.consultaUsuarioTienFlujoActual(Me.ctlEncabezadoDocumento.NidDocumento, Session("Data_Login")) = 1 Then
                    If conDoc.usuarioEsCreadorDocumento(Me.ctlEncabezadoDocumento.NidDocumento, Session("Data_Login")) = creadorDocumento.esUsuarioCreador Then
                        habilitarDocumento(True)
                    Else
                        habilitarDocumento(False)
                    End If
                End If
                Me.ctlToolBar.NidDocumentoValor = Me.ctlEncabezadoDocumento.NidDocumento
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.PendienteDeAprobacion)

            Case enumEstadoDeDocumento.Aprobado
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Aprobado)

            Case enumEstadoDeDocumento.Rechazado
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Rechazado)

            Case enumEstadoDeDocumento.Terminado
                Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.Terminado)
        End Select
    End Sub

    ''' <summary>
    ''' Metodo para establecer un encabezado al documento, generando una nueva clave de documento
    ''' y cambiando su estado a NuevoAGuardar
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub nuevoDocumento()
        Dim datUsuario As New DataAccesGenerales()
        Me.ctlEncabezadoDocumento.TextoEmisor = datUsuario.usuarioObtieneNombre(Session("Data_Login"))
        Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.NuevoAGuardar
        Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.NuevoAGuardar)

        Me.ctlEncabezadoDocumento.TextoCodigo = textoEcabezado.enElaboracion
        Me.ctlEncabezadoDocumento.TextoFechaCreacion = Now.Date.ToShortDateString()
        Me.ctlEncabezadoDocumento.TextoEstado = textoEcabezado.nuevo
        habilitarDocumento(True)
    End Sub

    ''' <summary>
    ''' Metodo para habilitar o desabilitar los componentes del documento
    ''' </summary>
    ''' <param name="bol_Estado">True o False</param>
    ''' <remarks></remarks>
    Private Sub habilitarDocumento(bol_Estado As Boolean)
        'Habilita los campos necesarios para realizar el documento
        ?HabilitarCampos
    End Sub

    ''' <summary>
    ''' Metodo para insertar un nuevo documento en la base de datos
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub crearDocumento()
        'Crea un documento nuevo en la base de datos
        Dim dGenerales As New DataAccesGenerales
        Dim nidEmpresa As Integer = dGenerales.UsuarioObtieneNidEmpresa(Session("Data_Login"))
        Dim nidusuario As Integer = dGenerales.usuarioObtieneNidUsuario(Session("Data_Login"))
        Dim documentoNoGuardado As Byte = 0
        Dim nidDocumento As Integer = 0
        Dim transaccionFlujo As Byte = 0 ' Crea flujo documento 

        Try
            nidDocumento = dGenerales.insertaEncabezadoDocumento(enumTipoDocumento.AvisoArribo, nidEmpresa, nidusuario) ' Crea encabezado documetno
            If nidDocumento <> transaccion.transaccionNoTerminada Then
                transaccionFlujo = dGenerales.insertaFlujoDocumento(nidDocumento, enumTipoDocumento.AvisoArribo, nidusuario)
                If transaccionFlujo <> transaccion.transaccionNoTerminada Then ' Crea flujo documento detalle
                    Me.ctlEncabezadoDocumento.NidDocumento = nidDocumento
                    ctlEncabezadoDocumento.ObtenerDocumento(nidDocumento)
                    Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.PendienteDeAprobacion
                    Me.ctlToolBar.NidDocumentoValor = nidDocumento
                    Me.ctlToolBar.habilitarBotones(enumEstadoDeDocumento.PendienteDeAprobacion)
                End If
            End If
        Catch ex As Exception
            Me.ctlDocumentoMensaje.MostrarException(Controles_ctlDocumentoMensaje.tipoMensaje.CrearDocumentoExcepcion, ex.Message)
            mensaje()
        End Try
    End Sub

    ''' <summary>
    ''' Metodo para guardar el archivo creado en la base de datos
    ''' pasando como parametros el nid del documento y un tipo de guardado
    ''' el cual es:
    ''' 0: insertar nuevo
    ''' 1: actualizar
    ''' </summary>
    ''' <param name="nidDocumento">nid del documento actual</param>
    ''' <param name="tipoGuradado">tipo de guardado</param>
    ''' <remarks>el nid documento se obtiene del control ctlEncabezadoDocumento</remarks>
    Private Sub guardarDocumento(nidDocumento As Integer)
        Dim transaccion As Byte = 0
        Dim str_Mensaje As String = ""
        Dim dAvisoArribo As New DataAccesAvisoArribo
	    Dim pnid As Long
    Dim pnidDocumento As Long
    Dim pnidPais_Origen As Integer
    Dim pnidPais_Destino As Integer
    Dim pnidPuerto_Origen As Integer
    Dim pnidPuerto_Destino As Integer
    Dim pTRB As Double
    Dim peslora As Double
    Dim pcalado As Double
    Dim pmanga As Double
    Dim pTRN As Double
    Dim pfecha_ETA As String
    Dim pfecha_ETF As String
    Dim pnoExisteBuque As String
    Dim pletraLlamada As String
    Dim pbandera As String
    Dim pnidBuque As Integer
    Dim pnidViaje As Integer
    Dim pnidEmpRemolcador As Integer
    Dim pnidEmpPilotos As Integer
    Dim pnidCargaImpo As Integer
    Dim pnidCargaExpo As Integer
    Dim pnidCargaCabEnt As Integer
    Dim pnidCargaCabSal As Integer
    Dim ptonelaje_Expo As Double
    Dim ptonelaje_Impo As Double
    Dim ptonelaje_CabEnt As Double
    Dim ptonelaje_CabSal As Double
    Dim pdescargaXDia As Double
    Dim pcargaXDia As Double
    Dim pdescargaXDiaCabEnt As Double
    Dim pcargaXDiaCabSal As Double
    Dim pMMSI As String
    Dim pfacturar As String
    Dim pnombre_Buque As String
    Dim pdescCargaExpo As String
    Dim pdescCargaImpo As String
    Dim pdescCargaCabEnt As String
    Dim pdescCargaCabSal As String
    Dim pmotivoCancelacion As String
    Dim pobservaciones As String
    Dim pcapitan As String
    

        Try
	        transaccion = dAvisoArribo.AvisoArribo_InsertarModificar(pnid, pnidDocumento, pnidPais_Origen, pnidPais_Destino, pnidPuerto_Origen, pnidPuerto_Destino, pTRB, peslora, pcalado, pmanga, pTRN, pfecha_ETA, pfecha_ETF, pnoExisteBuque, pletraLlamada, pbandera, pnidBuque, pnidViaje, pnidEmpRemolcador, pnidEmpPilotos, pnidCargaImpo, pnidCargaExpo, pnidCargaCabEnt, pnidCargaCabSal, ptonelaje_Expo, ptonelaje_Impo, ptonelaje_CabEnt, ptonelaje_CabSal, pdescargaXDia, pcargaXDia, pdescargaXDiaCabEnt, pcargaXDiaCabSal, pMMSI, pfacturar, pnombre_Buque, pdescCargaExpo, pdescCargaImpo, pdescCargaCabEnt, pdescCargaCabSal, pmotivoCancelacion, pobservaciones, pcapitan)
            If transaccion = 1 Then
                Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.GuardarExito)
            Else
                Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.GuardarError)
            End If
        Catch ex As Exception
            Me.ctlDocumentoMensaje.MostrarException(Controles_ctlDocumentoMensaje.tipoMensaje.GuardarExcepcion, ex.Message)
        End Try
        mensaje()
    End Sub

    ''' <summary>
    ''' Metodo para llamar al control ctlDocumentoFirmar el cual se encarga de mostrar la pantalla
    ''' para la carga de los archivos necesarios para la firma del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub firmarDocumento()
        Me.ctlDocumentoFirmar.CodigoDocumento = Me.ctlEncabezadoDocumento.TextoCodigo
        Me.mpeFirmarDocumento.Show()
    End Sub

    ''' <summary>
    ''' Metodo para realizar el firmado del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub firmar()
        Try
            Dim datosSolicitud As New DataAccesAvisoArribo
            Dim datosGeneral As New DataAccesGenerales
            Dim dataLogin As New dataLogin
            dataLogin = Session("Data_Login")
            Dim firmarDocumento As New DataAccesFirmarDocumento()
            firmarDocumento.ContrasenaVal = ctlDocumentoFirmar.Contrasena
            firmarDocumento.DatosCertificadoVal = ctlDocumentoFirmar.DatosCertificadoCargado
            firmarDocumento.DatosLlaveVal = ctlDocumentoFirmar.DatosLlaveCargado
            firmarDocumento.NidDocumentoVal = ctlEncabezadoDocumento.NidDocumento
            firmarDocumento.NidUsuarioVal = datosGeneral.usuarioObtieneNidUsuario(dataLogin)
            firmarDocumento.XmlBaseValue = datosSolicitud.AvisoArribo_CadenaOriginalXMLChilkat(Me.ctlEncabezadoDocumento.NidDocumento)
            firmarDocumento.CodigoDocumentoVal = Me.ctlEncabezadoDocumento.TextoCodigo

            If firmarDocumento.firmarDocumentoXML() = DataAccesGenerales.transaccion.terminado Then
                Dim conDoc As New DataAccesGenerales
                If conDoc.confirmarDocumento(CInt(Me.ctlEncabezadoDocumento.NidDocumento), enumEstadoDeDocumento.Aprobado, String.Empty, Session("Data_Login")) = DataAccesGenerales.transaccion.terminado Then
                    Me.ctlEncabezadoDocumento.ObtenerDocumento(Me.ctlEncabezadoDocumento.NidDocumento)
                    habilitarCampos(Me.ctlEncabezadoDocumento.EstadoDocumento)
                    Me.ctlDocumentoFirmar.CelloDigital = firmarDocumento.CadenaHASHValue
                    Me.ctlDocumentoFirmar.HabilitarFirmado = False
                    Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.FirmaExito)
                Else
                    Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.FirmaError)
                End If
            Else
                Me.ctlDocumentoMensaje.MostrarMensaje(Controles_ctlDocumentoMensaje.tipoMensaje.FirmaError)
            End If
        Catch ex As Exception
            Throw ex
        End Try
    End Sub

    ''' <summary>
    ''' Metodo para generar una nueva clave de documento si borrar los datos actuales de la pagina
    ''' y asi permitir la edicion del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub editarDocumento()
        Me.ctlEncabezadoDocumento.EstadoDocumento = enumEstadoDeDocumento.NuevoAGuardar
        Me.ctlEncabezadoDocumento.NidDocumento = 0
        Me.habilitarCampos(enumEstadoDeDocumento.NuevoAGuardar)
    End Sub

    ''' <summary>
    ''' Metodo para direccionar la pagina a donde se pueda ver el reporte del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub imprimirDocumento()
        'Response para direccionar al la pagina del reporte a imprimir
        Response.Redirect("~\Documentos\AvisoArribo\Reporte\AvisoArriboReporte.aspx?" & "nidDocumento=" & Me.ctlEncabezadoDocumento.NidDocumento)
    End Sub

    ''' <summary>
    ''' Metodo para mostrar la incidencias del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub consultarIncidencias()
        Me.ctlDocumentoIncidencias.consultarIncidencias(Me.ctlEncabezadoDocumento.NidDocumento)
        Me.mpeDocIncidencias.Show()
    End Sub

    ''' <summary>
    ''' Metodo para mostrar la pantalla de cancelar documento la cual se encarga
    ''' de la cancelacion del documento
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub cancelarDocumento()
        Me.mpeDocCancelar.Show()
    End Sub

    ''' <summary>
    ''' Metodo para mostrar un mensaje en la pantalla
    ''' </summary>
    ''' <remarks></remarks>
    Private Sub mensaje()
        Me.mpeMensaje.Show()
    End Sub

    ''' <summary>
    ''' Metodo para mostrar los mensajes de validacion
    ''' </summary>
    ''' <param name="mensaje"> mensaje a mostrar en pantalla</param>
    ''' <remarks></remarks>
    Public Sub mensajeValidacion(ByVal mensaje As String)
        Me.ctlMensajeValidacion.Mensaje = mensaje
        Me.mpeMenValidacion.Show()
    End Sub

    ''' <summary>
    ''' Metodo para verificar que los datos sean los correctos
    ''' </summary>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function VerificarDatos() As Boolean
        Dim str_Mensaje As String = ""
        Dim bol_valor As Boolean = False
        Try
        

            If str_Mensaje = "" Then
                bol_Valor = True
            Else
                bol_Valor = False
                mensajeValidacion("Datos no validos" + Chr(13) + str_Mensaje)
            End If

        Catch ex As Exception
            bol_Valor = False
            mensajeValidacion("Error en el metodo VerificarDatos(): " + ex.Message)
        End Try

        Return bol_valor
    End Function

    

#End Region

End Class
  
